using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioInputControl : MonoBehaviour
{

    private AudioClip clip;

    // Start is called before the first frame update
    void Start()
    {
        #region 获取麦克风信息

        // 通过Microphone.devices可以获取到所有的麦克风设备
        string[] devices = Microphone.devices;
        for (int i = 0; i < devices.Length; i++)
        {
            print(devices[i]);
        }

        #endregion

        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            #region 开始录制

            // 参数1: 就是传对应设备名, 如果要使用默认设备就传null
            // 参数2: 超过录制长度后, 是否重头录制, 会覆盖掉之前的
            // 参数3: 录制时长; 单位: 秒
            // 参数4: 采样率, 一般都是44100
            clip = Microphone.Start(null, false, 10, 44100);

            #endregion
        }
        
        if (Input.GetKeyUp(KeyCode.Space))
        {
            // 参数1: 就是传对应设备名, 如果要使用默认设备就传null
            Microphone.End(null);
            // 第一次去获取, 没有就添加
            AudioSource _audioSource = this.GetComponent<AudioSource>();
            if (_audioSource == null)
            {
                _audioSource = this.gameObject.AddComponent<AudioSource>();
            }
            _audioSource.clip = clip;
            _audioSource.Play();

            #region 获取音频数据存储或者传输

            //  数据总长度 = clip.channels * clip.samples; clip.channels: 声道数, clip.samples: 剪辑长度
            float[] _data = new float[clip.channels * clip.samples];
            print("开始长度: " + _data.Length);
            // 参数1: 设置数据的数组
            // 参数2: 偏移, 一般都是0
            clip.GetData(_data, 0);
            print("结束长度: " + _data.Length);
            #endregion
        }


    }
}
